package com.c2b.algorithm.leetcode.base;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * <a href='https://leetcode.cn/problems/find-the-difference-of-two-arrays/'>找出两数组的不同(Find the Difference of Two Arrays)</a>
 * <p>
 * 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ，请你返回一个长度为 2 的列表 answer ，其中：
 *     <ul>
 *         <li>answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。</li>
 *         <li>answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组成的列表。</li>
 *     </ul>
 *     注意：列表中的整数可以按 任意 顺序返回。
 * </p>
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：nums1 = [1,2,3], nums2 = [2,4,6]
 *      输出：[[1,3],[4,6]]
 *      解释：
 *          对于 nums1 ，nums1[1] = 2 出现在 nums2 中下标 0 处，然而 nums1[0] = 1 和 nums1[2] = 3 没有出现在 nums2 中。因此，answer[0] = [1,3]。
 *          对于 nums2 ，nums2[0] = 2 出现在 nums1 中下标 1 处，然而 nums2[1] = 4 和 nums2[2] = 6 没有出现在 nums2 中。因此，answer[1] = [4,6]。
 *
 * 示例 2：
 *      输入：nums1 = [1,2,3,3], nums2 = [1,1,2,2]
 *      输出：[[3],[]]
 *      解释：
 *          对于 nums1 ，nums1[2] 和 nums1[3] 没有出现在 nums2 中。由于 nums1[2] == nums1[3] ，二者的值只需要在 answer[0] 中出现一次，故 answer[0] = [3]。
 *          nums2 中的每个整数都在 nums1 中出现，因此，answer[1] = [] 。
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>1 <= nums1.length, nums2.length <= 1000</li>
 *     <li>-1000 <= nums1[i], nums2[i] <= 1000</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2023/11/10 10:00
 */
public class LC2215FindTheDifferenceOfTwoArrays_S {
    static class Solution {
        public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
            List<List<Integer>> resList = new ArrayList<>(2);
            Set<Integer> nums1Set = new HashSet<>();
            Set<Integer> nums2Set = new HashSet<>();
            for (int i : nums1) {
                nums1Set.add(i);
            }
            for (int i : nums2) {
                nums2Set.add(i);
            }
            for (int i : nums1) {
                nums2Set.remove(i);
            }
            for (int i : nums2) {
                nums1Set.remove(i);
            }
            resList.add(new ArrayList<>(nums1Set));
            resList.add(new ArrayList<>(nums2Set));
            return resList;
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        //Printer.print(solution.findDifference(new int[]{1, 2, 3}, new int[]{2, 4, 6}));
        //Printer.print(solution.findDifference(new int[]{1, 2, 3, 3}, new int[]{1, 1, 2, 2}));
        Printer.printListListInteger(solution.findDifference(new int[]{-80, -15, -81, -28, -61, 63, 14, -45, -35, -10}, new int[]{-1, -40, -44, 41, 10, -43, 69, 10, 2}));
    }
}
